package com.zx.system.block.service;

import com.zx.core.wrapper.ObjectWrapper;
import com.zx.core.wrapper.PageWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.feign.client.dto.GetSysUserResponseDTO;
import com.zx.system.block.model.SysUser;
import com.zx.system.block.param.UserParam;
import com.zx.system.block.vo.SysUserVO;

import java.util.Set;

/**
 * <p>
 * description: 业务层用户服务 <br>
 * create: 2024-08-23 23:56
 * </p>
 *
 * @author zhou  xun
 */
public interface ISysUserService {


    /**
     * 分页查询用户列表
     *
     * @param userParam 用户查询参数
     * @return {@link PageWrapper<SysUser>}
     * @author zhou  xun
     * @since 2024-09-25
     */
    PageWrapper<SysUser> getUserListByPage(UserParam userParam);

    /**
     * 分页查询用户列表VO
     *
     * @param userParam 用户查询参数
     * @return {@link PageWrapper<SysUserVO>}
     * @author zhou  xun
     * @since 2024-09-25
     */
    PageWrapper<SysUserVO> getUserVOListByPage(UserParam userParam);

    /**
     * 新增用户
     *
     * @param userParam 用户参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper addUser(UserParam userParam);

    /**
     * 编辑用户
     *
     * @param userParam 用户参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper editUser(UserParam userParam);

    /**
     * 编辑用户状态
     *
     * @param id     用户id
     * @param status 用户状态 0 停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper editUserStatus(String id, Integer status);

    /**
     * 删除用户
     *
     * @param userId 用户id
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper deleteUser(String userId);

    /**
     * 重置密码
     *
     * @param userParam 用户参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2025-04-13
     */
    ResponseWrapper resetUserPwd(UserParam userParam);

    /**
     * 分配角色
     *
     * @param userId  用户id
     * @param roleIds 角色id列表
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2025-04-13
     */
    ResponseWrapper setUserRole(String userId, String[] roleIds);

    /**
     * 查询用户的角色id列表
     *
     * @param userId 用户id
     * @return {@link  ObjectWrapper } 菜单id集合
     * @author zhou  xun
     * @since 2025-04-15
     */
    ObjectWrapper<Set<String>> selectRoleIdsByUserId(String userId);

    /**
     * 分配岗位
     *
     * @param userId  用户id
     * @param postIds 岗位id列表
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2025-04-13
     */
    ResponseWrapper setUserPost(String userId, String[] postIds);

    /**
     * 查询用户信息
     *
     * @param userId 用户id
     * @return {@link  ObjectWrapper } 用户信息
     * @author zhou  xun
     * @since 2025-04-15
     */
    ObjectWrapper<GetSysUserResponseDTO> getUserById(String userId);

    /**
     * 修改用户密码
     *
     * @param userId      用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return {@link ResponseWrapper}
     */
    ResponseWrapper changePassword(String userId, String oldPassword, String newPassword);

    /**
     * 根据用户id查询用户信息
     *
     * @param userId 用户id
     * @return {@link SysUser} 用户信息
     * @author zhou  xun
     * @since 2025-04-15
     */
    SysUser selectUserById(String userId);
}
